/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.integrator.dao;

import br.com.integrator.Revista;
import br.com.integrator.util.ConnectionFactory;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;



public class RevistaDAORevImp implements DAORev {

    private Connection conn;

    public RevistaDAORevImp() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();
        } catch (Exception e) {
            throw new Exception("Erro:" + ":\n" + e.getMessage());
        }
    }

    @Override
    public void salvar(Revista revista) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        if (revista == null) 
            throw new Exception("O valor passado não pode ser nulo");

            try {
                String SQL = "INSERT INTO revistas(nome, editora, preco, edicao)" + "values(?,?,?,?)";
                conn = this.conn;
                ps = conn.prepareStatement(SQL);
                ps.setString(1, revista.getNome());
                ps.setString(2, revista.getEditora());
                ps.setDouble(3, revista.getPreco());
                ps.setDate(4, new java.sql.Date(revista.getEdicao().getTime()));
                ps.executeUpdate();

            } catch (SQLException sqle) {

                throw new Exception("Erro ao inserir dados" + sqle);

            } finally {
                ConnectionFactory.closeConnection(conn, ps);
            }
        }
      
        
 

    @Override
    public void atualizar(Revista revista) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;


        if (revista == null) {
            throw new Exception("O valor passado não pode ser nulo");
        }
        try {
            String SQL = "UPDATE revistas SET nome=?, " + "editora=?, "  + "preco=?, "+ "edicao=? " + "where id=?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setString(1, revista.getNome());
            ps.setString(2, revista.getEditora());
            ps.setDouble(3, revista.getPreco());
            ps.setDate(4, new java.sql.Date(revista.getEdicao().getTime()));
            ps.setInt(5, revista.getId());
            ps.executeUpdate();
        } catch (SQLException sqle) {
            throw new Exception("Erro ao atualizar dados: " + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    @Override
    public List todasRevistas() throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try {
            conn = this.conn;
            ps = conn.prepareStatement("select * from revistas order by id asc");
            rs = ps.executeQuery();
            List<Revista> list = new ArrayList<Revista>();
            while (rs.next()) {
                Integer id = rs.getInt(1);
                String nome = rs.getString(2);
                String editora = rs.getString(3);
                Double preco = rs.getDouble(4);
                Date edicao = rs.getDate(5);

                list.add(new Revista(id, nome, editora, preco, edicao));
            }

            return list;

        } catch (SQLException sqle) {


            throw new Exception(sqle);

        } finally {


            ConnectionFactory.closeConnection(conn, ps, rs);
        }

    }

    @Override
    public Revista procurarRevista(Integer id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try {
            conn = this.conn;
            ps = conn.prepareStatement("select * from revistas where id=?");
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (!rs.next()) {
                throw new Exception("Não foi encontrado nenhum" + "registro com o ID:" + id);
            }
            String nome = rs.getString(2);
            String editora = rs.getString(3);
            Double preco = rs.getDouble(4);
            Date edicao = rs.getDate(5);

            return new Revista(id, nome, editora, preco, edicao);
        } catch (SQLException sqle) {
            throw new Exception(sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }

    @Override
    public void excluir(Revista revista) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;

        if (revista == null) {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try {
            conn = this.conn;
            ps = conn.prepareStatement("delete from autores where id=?");
            ps.setInt(1, revista.getId());
            ps.executeUpdate();

        } catch (SQLException sqle) {
            throw new Exception("Erro ao excluir dados:" + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    
}

